package com.ydd.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.ydd.dto.CateDTO;
import com.ydd.dto.CategoryPageQueryDTO;
import com.ydd.entity.YddCate;
import com.ydd.exception.BaseException;
import com.ydd.mapper.YddArticleMapper;
import com.ydd.mapper.YddCateMapper;
import com.ydd.result.PageResult;
import com.ydd.service.YddCateService;
import com.ydd.vo.CateVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestBody;

import javax.security.auth.login.LoginException;
import java.util.List;

/**
 * @Description TODO
 * @Author fang
 * @Date 2023-05-29 16:24
 */
@Service
public class YddCateServiceImpl implements YddCateService {

    @Autowired
    private YddCateMapper yddCateMapper;
    @Autowired
    private YddArticleMapper yddArticleMapper;

    /**
     * GET分类列表-全部
     * 查询所有分类
     *
     * @return
     */
    @Override
    public List<CateVO> all() {
        List<CateVO> cateVOList =yddCateMapper.all();
        return cateVOList;
    }

    /**
     * POST分类添加
     *
     * @param cateDTO
     */
    @Override
    public void add(CateDTO cateDTO) {
        YddCate yddCate = new YddCate();
        BeanUtils.copyProperties(cateDTO,yddCate);
        yddCateMapper.add(cateDTO);
    }

    /**
     * POST分类修改
     *
     * @param cateDTO
     */
    @Override
        public void update(CateDTO cateDTO) {
        YddCate yddCate = new YddCate();
        BeanUtils.copyProperties(cateDTO,yddCate);

        yddCateMapper.updateCate(yddCate);
    }

    /**
     * GET分类删除（通过id删除分类）
     *
     * @param id
     */
    @Override
    public void del(String id) throws Exception {

        //需要先判断是否有文章 如果有的话无法删除
        //通过分类id查询分类下得文章数量
        Integer count = yddArticleMapper.findBycateid(id);
        //如果数量大于0 则表示分类下有关联文章 不能进行删除
        if(count > 0  ){
            throw  new BaseException("该误分类下有文章，不能删除错码：");
        }
        //如果不大于0 则表示为0 没有相关的文章 可以进行删除
        yddCateMapper.del(id);
    }

    /**
     * 分类列表-分页查询
     *
     * @param categoryPageQueryDTO
     * @return
     */
    @Override
    public PageResult list(CategoryPageQueryDTO categoryPageQueryDTO) {
        //设置分页数据
        PageHelper.startPage(categoryPageQueryDTO.getPage(),categoryPageQueryDTO.getLimit());
        //转换类型
        List<YddCate> yddCateList =yddCateMapper.page(categoryPageQueryDTO);
        //查询符合条件的总条数
        Long count = yddCateMapper.getCount(categoryPageQueryDTO);
        Page<YddCate> page = (Page<YddCate>)yddCateList;

        return new PageResult(count,page.getPages(),page.getPageSize(),page.getPages(),yddCateList);


    }

    /**
     * 通过分类id查询详情
     *
     * @param id
     * @return
     */
    @Override
    public YddCate findRow(Long id) {

        YddCate cate = yddCateMapper.findByid(id);
        return cate;
    }


}
